Le 27 mars 2018

Plan du module

Ce cours est un TD informatique constitue d'exemples et d'exercices du langage de programmation R sur la data visualisation. Les différents points abordés durant ces 15 heures de cours sont :

  • Extraction et manipulation des données (data mining)
  • Représentations graphiques
  • Valorisations de ces données par le biais de méthodes statistiques et de visualisations
  • Représentations graphiques interactives (html widget, plotly …)
  • Shiny et R markdown création d'application et de rapport interactif

Plan du module

Evaluation :

  • présentation de vos résultats en équipe d'un sujet de data science en lien avec votre sujet de mémoire
  • script R de data mining et de data visualisation

Plan de ce cours

Les 3 premières heures seront consacrées à une introduction sur la data science et des rappels sur R

  • Définition et cadre

Extraction et manipulation de données (data mining)

  • Principe de base de la data visualisation (infographie)
  • Rappels sur R
  • Objets R (variable, programme et fonction)
  • importer des données depuis le web
  • graphiques simples

Contexte

source('http://www.sthda.com/upload/rquery_wordcloud.r')
filePath <- "https://en.wikipedia.org/wiki/Big_data"
res<-rquery.wordcloud(filePath, type ="url", lang = "english")

https://fr.wikipedia.org/wiki/Big_data

Une Réalité Big Data

https://www.seagate.com/fr/fr/our-story/data-age-2025

\[ 1 Zo \simeq 10^{12} Go \]

De 3500 avant J.C, jusqu'à l'an 2000 l'Homme a accumulé \(5\,000\,000\,000 Go \simeq 0.005 Zo\). En 2025, les projections annonce \(40 Zo\)

Méga Données ?

Définition Big Data

"Big data is a term that describes large volumes of high velocity, complex and variable data that require advanced techniques and technologies to enable the capture, storage, distribution, management, and analysis of the information."

TechAmerica Foundation's Federal Big Data Commission, 2012

library(readr)
library(ggplot2)
library(ggthemes)
multiTimeline <- read_csv("data/multiTimeline.csv",skip = 2)
multiTimeline$date <- paste0(multiTimeline$Mois,"-15")
ggplot2::ggplot(multiTimeline,aes(as.Date(date),multiTimeline$`Big data: (Dans tous les pays)`)) + geom_line(size=1) +
  geom_smooth(se = FALSE)+ theme_igray()+
  labs(x="Date",y="Recherche en %", title="Big Data",subtitle="Fréquence des recherches du mot Big Data depuis 2004",caption="https://trends.google.com/trends/explore?date=all&q=Big%20data")

Un besoin d'analyse

des outils, méthodes …

R open source

Data visualation

Définition

  • communiquer des données de façon visuelle

  • transformer des données en information

  • résultats graphiques clairs et compréhensibles

Exemple

Principes d'infographie

  • mémoire courte quelques secondes d'attention ou de réflexion
  • un max de \(\simeq 11\) types de couleurs ou de styles différents facilement distinguables
  • notion de perspective données et vérités

  • source "How to Lie With Statistics", 1954, Huff

Science sous jacente les statistiques

source "How to Lie With Statistics", 1954, Huff

Mathématiques, géométrie et données

sous-jacentes déterminent l'allure du graphique et influence le lecteur

Mathématiques, géométrie et données

Un graphe une histoires dif.

Pour rappel, Clinton a perdu l'élection 242 "county" contre 2,232 pour Trump. Cependant, au vote populaire Clinton passe devant Trump avec respectivement 50.5% et 49.5% des votes en sa faveur.

Un graphique vaut mille mots

library(ggplot2)
df = data.frame(x=rnorm(1:84),y=rnorm(1:84),
                lettres=LETTERS[rep(seq( from = 1, to = 28 ),3)])

df[!complete.cases(df),"lettres"]="A"
df$test= ifelse(df$lettres=="A","A","pas A")
ggplot(df,aes(x=x,y=y))+geom_text(aes(label=lettres))

#ggplot(df,aes(x=x,y=y,colour=test))+geom_text(aes(label=lettres))

Combien y a t il de A ?

ggplot(df,aes(x=x,y=y,colour=test,size=test))+geom_text(aes(label=lettres))+labs(colour="",size="")+scale_color_manual(values = c("red","black"))+scale_size_manual(values = c(6.5,4))

  • Réponse : 9

Pourquoi R

  • Open source & Gratuit
  • Facile à installer sur les systèmes d'exploitations Linux, Windows et Apple
  • Une très grosse communauté de développeurs et d'utilisateurs
  • Facile à utiliser pour des non-programmeurs pour des calculs statistiques
  • Possibilité de créer des illustrations, applications web et même la présentation que vous lisez actuellement

Installation de R

Pour ?tre bon en R …

  • savoir demander de l'aide une qualité essentielle d'un programmeur

  • stack overflow forum en ligne
  • suivre des exemples R blogger, git_hub …
  • commandes en console R ?? et ?
  • utiliser un environnement de travail int?gr? (IDE) comme Rstudio (facilite la programmation, auto indentation, variables historiques, etc …)

Présentation de Rstudio

Codes sources, programmes et scripts

Codes sources, programmes et scripts

  • créer un fichier texte hello.R
  • écrire votre premier programme en R
#  le Diése sert à commenter le reste de la la ligne  
# tout ce qui est écrit ici ne sera pas exécuté par R  
# indiquer le but du programme ou toutes autres informations  
# Nom  et Prénom dates 
a <- "hello World ! "
b = pi
print(a)
print(paste("pi is equal to",b))

Comment l'exécuter ?

A l'aide de la console R :

source("cours_data_visualisation/hello.R")
## [1] "hello World ! "

L'environnement de R

Ce qui a changé

  • Ajout de la commande lanc?e dans la console R dans l'historique
  • Ajout de la variable a dans l'environnement R (commande ls() pour lister les objets)

Les variables dans R

class(a)
## [1] "character"
b <- 1 
class(b)
## [1] "numeric"
#vecteurs
c <- c(1,2,3,4)
d <- c("a","b","c","d")
e <- c("a"=1,"b"=2,"c"=3,"d"=4)
f <- c(1,"a","d",4)

Les vecteurs

length(x = c)
## [1] 4
names(x=e)
## [1] "a" "b" "c" "d"
# accéder à un élement
c[1]
## [1] 1
e["a"]
## a 
## 1
# ou plusieurs
c[1:2]
## [1] 1 2
e[c("a","c")]
## a c 
## 1 3

Les facteurs

ff<-factor(1:10)

f <- factor(1:10,levels = seq(from = 10,to = 1,by = -1))

ff
##  [1] 1  2  3  4  5  6  7  8  9  10
## Levels: 1 2 3 4 5 6 7 8 9 10
f
##  [1] 1  2  3  4  5  6  7  8  9  10
## Levels: 10 9 8 7 6 5 4 3 2 1
as.numeric(as.character(ff))
##  [1]  1  2  3  4  5  6  7  8  9 10
as.numeric(ff)
##  [1]  1  2  3  4  5  6  7  8  9 10

et les classes

class(c)
## [1] "numeric"
class(d)
## [1] "character"
class(e)
## [1] "numeric"
class(f)
## [1] "factor"

attention f ne pas mélanger les types de variables

Les Matrices

f.m <- cbind(f)
f.m
##        f
##  [1,] 10
##  [2,]  9
##  [3,]  8
##  [4,]  7
##  [5,]  6
##  [6,]  5
##  [7,]  4
##  [8,]  3
##  [9,]  2
## [10,]  1
c.m <- cbind(c)
c.m
##      c
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4

Matrices numériques ou caractères

m.m <- cbind(f.m,f.m)
m.m
##        f  f
##  [1,] 10 10
##  [2,]  9  9
##  [3,]  8  8
##  [4,]  7  7
##  [5,]  6  6
##  [6,]  5  5
##  [7,]  4  4
##  [8,]  3  3
##  [9,]  2  2
## [10,]  1  1
n.m <- cbind(c.m,c.m)
n.m
##      c c
## [1,] 1 1
## [2,] 2 2
## [3,] 3 3
## [4,] 4 4

Matrices et Data frames

mat <- matrix(data = rep(c.m,3), ncol=3,nrow = 4)
mat
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    2    2    2
## [3,]    3    3    3
## [4,]    4    4    4
df = data.frame("numeriques"= 1:4, lettres=c("A","B","C","D"),stringsAsFactors = F)
df 
##   numeriques lettres
## 1          1       A
## 2          2       B
## 3          3       C
## 4          4       D

Matrices et Data frames

class(mat[,1])
## [1] "numeric"
class(df[,"numeriques"])
## [1] "integer"
class(df[,"lettres"])
## [1] "character"

Matrices Vs Data frames

Quelle est l'avantange d'une matrice par rapport à une data frame ?

Passer d'un type à l'autre

as.matrix(df)
##      numeriques lettres
## [1,] "1"        "A"    
## [2,] "2"        "B"    
## [3,] "3"        "C"    
## [4,] "4"        "D"
as.numeric(f)
##  [1] 10  9  8  7  6  5  4  3  2  1

Relation logique

1==0
## [1] FALSE
1>=0
## [1] TRUE
1<=0
## [1] FALSE
"a" == "b"
## [1] FALSE

Fonctions

les commandes matrix(), cbind(), data.frame() sont des fonctions codées

Définition

  • un objet R
  • des commandes R ?crites dans un fichier qui effectuent une t?che pr?d?finie
  • permet de faire automatiquement la même tâche plusieurs fois
  • garder un programme plus lisible
  • un gain de temps ? long terme

Ecrire votre premi?re fonction

écrire le même code que précédemment sous forme de fonction dans un nouveau fichier hello_fun.R

hello <-function(texte=NULL){   # argument ou données d'entr?e

  #code manipulant les données d'entr?e
 
return(texte)  #  return  renvoie le r?sultat de la fonction  
}
 source("cours_data_visualisation/hello_fun.R")

 hello("hello world !")
## [1] "hello world !"

Un peu plus compliqué

un petit ajout le nom de l'utilisateur

hello <-function(texte=NULL){  
  #on souhaite coller le nom de l'utilisateur ? "hello world"
  # on récupére le nom de l'utilisateur 
 nom <- Sys.getenv("USERNAME") # fonction trouv?e via une recherche web
   # on colle le nom de l'utilisateur
 texte <- paste(nom,texte)
 
return(texte)  #  return  renvoie le résultat de la fonction  
}

 source("cours_data_visualisation/hello_fun2.R")

 hello("hello world !")
## [1] "Laurent hello world !"

Fonction cor()

Vous avez écrit une fonction comme les fonctions de base de R, comme par exemple cor() qui calcule la corrélation des données de deux vecteurs ou des données contenues dans une matrice

nrow
## function (x) 
## dim(x)[1L]
## <bytecode: 0x000000000d08e048>
## <environment: namespace:base>
?cor
## starting httpd help server ... done
cor(rnorm(n = 100,mean = 1,sd = 0.25),rnorm(n = 100,mean = 1,sd = 25))
## [1] 0.01785778

Les boucles

Calculer \(n!\) pour \(n=10\).

factorielle <-1
for (i in seq(1, 10)){
  factorielle <- factorielle*i
}
    
print(factorielle)
## [1] 3628800

Vérification

On vérifie avec la fonction déjà codée.

factorial(10)
## [1] 3628800

Importer des données

Importer des données sous R

Import Dataset > from Local File

Puis vérifier que les données sont sous le bon format

Importer des données sous console R

read.csv("C:/Users/Laurent/Downloads/INSEE-29_000067684_A.csv")
##          Date  Value
## 1  2012-12-31 149017
## 2  2011-12-31 148803
## 3  2010-12-31 147571
## 4  2007-12-31 151108
## 5  2006-12-31 152337
## 6  1999-12-31 151279
## 7  1990-12-31 141404
## 8  1982-12-31 136038
## 9  1975-12-31 137591
## 10 1968-12-31 128557
## 11 1962-12-31 115273
class(read.csv("C:/Users/Laurent/Downloads/INSEE-29_000067684_A.csv"))
## [1] "data.frame"

Visualiser les données

INSEE.29_000067684_A <- read.csv("C:/Users/Laurent/Downloads/
                                 INSEE-29_000067684_A.csv")
View(INSEE.29_000067684_A)

Visualiser les données

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value)

Changer le style du graphe

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "l")

Changer le style du graphe

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "b")

Légendes

plot(x = as.Date(INSEE.29_000067684_A$Date),y=
       INSEE.29_000067684_A$Value,type = "l",xlab ="Dates" ,
     ylab="populations")